class Solution {


    private boolean isLegalChar(char ch) {
        if(ch >= 'a' && ch <= 'z' || ch >= '0' && ch <= '9') {
            return true;
        }
        return false;
    }


    public boolean isPalindrome(String s) {
        s = s.toLowerCase();
        int left = 0;
        int right = s.length()-1;
        while(left < right) {
            //从左边找到一个有效的字符
            while(left < right &&  !isLegalChar(s.charAt(left)) ) {
                left++;
            }
            //从右边找到一个有效的字符
            while(left < right &&  !isLegalChar(s.charAt(right)) ) {
                right--;
            }
            //left和right 下标都是有效的字符了，但是相不相同 不一定的
            if(s.charAt(left) !=  s.charAt(right)) {
                return false;
            }else{
                left++;
                right--;
            }
        }
        return true;
    }
}